const AC_GAME_OBJECT = []           //存储所有游戏对象

export class AcGameObject {
    constructor() {
        AC_GAME_OBJECT.push(this)
        this.timedelta = 0;         //时差
        this.has_called_start = false
    }

    //自定义方法,名字随意
    start() {       //只执行一次

    }

    update() {      //每一帧执行一次,除了第一帧外

    }

    on_destroy() {  //删除前执行

    }

    destroy() {
        this.on_destroy();

        for (let i in AC_GAME_OBJECT) {
            const obj = AC_GAME_OBJECT[i];
            if (obj === this) {
                AC_GAME_OBJECT.splice(i, 1);
                break;
            }
        }
    }
}

let last_timestamp;     //上一次执行的时刻
const step = (timestamp) => {
    for (let obj of AC_GAME_OBJECT) {
        if (!obj.has_called_start) {
            obj.has_called_start = true;
            obj.start();
        } else {
            obj.timedelta = timestamp - last_timestamp;
            obj.update();
        }
    }

    //更新上一次执行的时间为现在
    last_timestamp = timestamp;
    requestAnimationFrame(step);            //递归函数
}

//告诉浏览器——你希望执行一个动画，并且要求浏览器在下次重绘之前调用指定的回调函数更新动画。
requestAnimationFrame(step)